Inputs: an array with the heapSize attribute and an index into the array.
When called: It is assumed that the binary tree’s rooted at and are max-heaps, but that might be smaller than it’s children, thus violating the max-heap property.
MAX-HEAPIFY lets the value of “float down” in the max-heap so that the subtree rooted at index obeys the max-heap property.
You basically just want to find the largest number out of the , and . Then if either of the children’s values are larger then you want to swap the largest with and recursively call MAX-HEAPIFY on the index where the largest value was before the swap.
def MAX_HEAPIFY(A, i):
l = LEFT(i)
r = RIGHT(i)
if l <= A.heapSize() and A[l] > A[i]:
largest = l
else:
largest = i
if r <= A.heapSize() and A[r] > A[largest]:
largest = r
if largest != i:
value = A[i]
A[i] = A[largest]
A[largest] = value
MAX_HEAPIFY(A,largest)
Time Complexity
to compute the relationship between and the two children plus the time it takes to run MAX_HEAPIFY on the subtree (the recursion). The children’s subtrees each have size at most so the run time of MAX_HEAPIFY is:
This is an example of case 2 of the Master Theorem so the solution is